package p.ithorns.sample.websocket.core;


import p.ithorns.framework.common.utils.StringUtil;
import p.ithorns.sample.websocket.model.WsParam;

import java.util.Map;
import java.util.Set;

/**
 * WsClientCache
 *
 * @author liuhaitao
 * @version 1.0.0
 * @date 2022/4/15 14:28
 */
public interface WsCacheService {

    /**
     * 注册并初始化客户端参数
     * 客户端(Client)连接上WS服务时使用token注册，
     *
     * @param clientId -客户端ID
     */
    void initParam(String clientId);

    /**
     * 更新客户端参数
     *
     * @param clientId -客户端ID
     * @param param    -参数对象
     */
    <E> void setParam(String clientId, WsParam<E> param);

    /**
     * 移除客户端
     *
     * @param clientId -客户端ID
     */
    void removeParam(String clientId);

    /**
     * 获取客户端参数
     *
     * @param clientId -客户端ID
     * @return WsClientParam
     */
    <E> WsParam<E> getParam(String clientId);

    /**
     * 获取客户端:参数键值
     *
     * @return Set<Map.Entry < String, WsMsgData>>
     */
    <E> Set<Map.Entry<String, WsParam>> getClientParams();

    /**
     * 复制定位参数
     *
     * @param source 源
     * @param target 目标
     */
    default <E> void copyParamPros(final WsParam<E> source, final WsParam<E> target) {
        if (StringUtil.isNotBlank(source.getClientId())) {
            target.setClientId(source.getClientId());
        }
        if (null != source.getMsgType()) {
            target.setMsgType(source.getMsgType());
        }
        if (null != source.getExt()) {
            target.setExt(source.getExt());
        }
    }

}
